package com.jxm.thread.demo2.creat3;

import java.util.concurrent.Callable;

/**
 * @Author: jxm
 * @Description:
 * @Date: 2024-1-4 9:45
 * @Version: 1.0
 */
public class NumThread implements Callable {

    /**
     * 与使用Runnable相比， Callable功能更强大些
     *
     * 相比run()方法，call()可以有返回值，更灵活
     * call()方法可以使用throws抛出异常，更灵活
     * Callable使用泛型参数，可以指明具体的call()返回值类型，更灵活
     * Future接口（了解）
     *
     * 可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完成、获取结果等。
     * FutureTask是Futrue接口的唯一的实现类
     * FutureTask 同时实现了Runnable, Future接口。它既可以作为Runnable被线程执行，又可以作为Future得到Callable的返回值
     *
     * 缺点：在获取分线程执行结果的时候，当前线程（或是主线程）受阻塞，效率较低。
     * @return
     * @throws Exception
     */

    @Override
    public Object call() throws Exception {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
//                System.out.println(i);
                sum += i;
            }
        }
        return sum;
    }
}
